La idea de “datos ordenados” o tidy data es una forma de manejar de forma efectiva y eso aplica también para el caso de los datos textuales. Según Hadley Wickham (2004) los datos “tidy” tiene tres características:
(Si en esta definición les resuena aquello que en las materias de Metodología de la Investigación se llamaba “estructura tripartita del dato” o lo que Juan Samaja llamaba “estructura cuatriparti ta del dato” están bien encaminades).
En el contexto de minería de texto, los datos ordenados van a tener la siguente estrucutra: un token por fila. Un token es una unidad conceptual y/o analíticamente signifactivas con las que dividimos un documento. Un token puede ser una palabra (ese será el caso más frecuente en este curso) pero también, n-gramas, oraciones e incluso párrafos. De hecho, un primer paso en el preprocesamiento de texto es dividir el corpus en tokens.
Como puede verse esta estructura difiere de otras formas de almacenar el texto crudo
Como iremos viendo, va a ser muy fácil pasar del texto en formato tidy a otros formatos. Particularmente, vamos a estar yendo y viniendo para diferentes tareas. Así, tendremos que modelar en formato Matrix-documento-término, pero llevaremos esos resultados a formato tidy para generar visualizaciones que nos permitan interpretar este modelo.
Marx escribió en el famoso Prólogo a la Contribución a la Crítica de la Economía Política de 1859:
marx <- c("El conjunto de estas relaciones de producción forma la estructura económica de la sociedad, la base real sobre la que se levanta la superestructura jurídica y política y a la que corresponden determinadas formas de conciencia social. El modo de producción de la vida material condiciona el proceso de la vida social política y espiritual en general. No es la conciencia del hombre la que determina su ser sino, por el contrario, el ser social es lo que determina su conciencia. Al llegar a una fase determinada de desarrollo las fuerzas productivas materiales de la sociedad entran en contradicción con las relaciones de producción existentes o, lo que no es más que la expresión jurídica de esto, con las relaciones de propiedad dentro de las cuales se han desenvuelto hasta allí. De formas de desarrollo de las fuerzas productivas, estas relaciones se convierten en trabas suyas, y se abre así una época de revolución social. Al cambiar la base económica se transforma, más o menos rápidamente, toda la inmensa superestructura erigida sobre ella.")
marx
[1] "El conjunto de estas relaciones de producción forma la estructura económica de la sociedad, la base real sobre la que se levanta la superestructura jurídica y política y a la que corresponden determinadas formas de conciencia social. El modo de producción de la vida material condiciona el proceso de la vida social política y espiritual en general. No es la conciencia del hombre la que determina su ser sino, por el contrario, el ser social es lo que determina su conciencia. Al llegar a una fase determinada de desarrollo las fuerzas productivas materiales de la sociedad entran en contradicción con las relaciones de producción existentes o, lo que no es más que la expresión jurídica de esto, con las relaciones de propiedad dentro de las cuales se han desenvuelto hasta allí. De formas de desarrollo de las fuerzas productivas, estas relaciones se convierten en trabas suyas, y se abre así una época de revolución social. Al cambiar la base económica se transforma, más o menos rápidamente, toda la inmensa superestructura erigida sobre ella."
¿Qué formato de los que vimos hasta aquí sería este?
Para poder analizarlo como datos tidy, primero tenemos que llevarlo a un dataframe.
marx_df <- tibble(line = 1, text = marx)
marx_df
¿Qué significa que este marco de datos se ha impreso como un “tibble”? Un tibble es una clase moderna de marco de datos dentro de R, disponible en los paquetes dplyr y tibble, que tiene un método de impresión conveniente, no convierte cadenas en factores y no usa nombres de fila. Tibbles son ideales para usar con herramientas ordenadas.
Sin embargo, tenga en cuenta que este marco de datos que contiene texto aún no es compatible con un análisis de texto ordenado. No podemos filtrar las palabras ni contar las que ocurren con mayor frecuencia, ya que cada fila está formada por varias palabras combinadas. Necesitamos convertir esto para que tenga un token por documento por fila.
¿Cuántos documentos tenemos?
Dentro de nuestro marco de texto ordenado, necesitamos dividir el texto en tokens individuales (un proceso llamado tokenización) y transformarlo en una estructura de datos ordenada. Para hacer esto, usamos la función unnest_tokens() de tidytext.
library(tidytext)
marx_df %>%
unnest_tokens(word, text)
Usamos aquí dos argumentos básicos:
Recordar que text_df arriba tiene una columna llamada text que contiene los datos de interés. A su vez unnest_tokens() realiza la tokenización por defecto usando palabras. Esto puede cambiarse sin problemas.
¿Qué formato tiene ahora?
A su vez, es importante observar que:
unnest_tokens() convierte los tokens a minúsculas, lo que los hace más fáciles de comparar o combinar con otros conjuntos de datos. (Esto puede modificarse utilizando el argumento to_lower = FALSE)Un diagrama del flujo de trabajo puede verse a continuación:
Vamos a trabajar con un dataset que el capo de Diego Kosloski escrapeó de la sección en español del Marxist Internet Archive.
Cargamos los datos:
marx_engels <- read_csv('../data/marx_engels.csv')
Parsed with column specification:
cols(
tipo = [31mcol_character()[39m,
autor = [31mcol_character()[39m,
titulo = [31mcol_character()[39m,
texto = [31mcol_character()[39m
)
marx_engels